package com.sojson.util.async.interfaces;

import java.util.List;

import com.github.pagehelper.Page;
import com.sojson.util.StringUtil;
import com.sojson.util.async.PageHandleUtil;

/**
 * 默认分页处理器(一直获取下一页数据)
 * 
 * @author liu
 * @date 2021-08-15
 */
public class PageHandleDefault<T> extends PageHandle<T> {

    /**
     * 构造方法
     */
    public PageHandleDefault() {
        super();
    }

    /**
     * 构造方法
     * 
     * @param isPage    数据是否分页查询
     */
    public PageHandleDefault(Boolean isPage) {
        super(isPage);
    }

    /**
     * 构造方法
     * 
     * @param orderByColumn 查询数据的排序字段
     */
    public PageHandleDefault(String orderByColumn) {
        super(orderByColumn);
    }

    /**
     * 构造方法
     * 
     * @param orderByColumn 查询数据的排序字段
     * @param isPage        数据是否分页查询
     */
    public PageHandleDefault(String orderByColumn, Boolean isPage) {
        super(orderByColumn, isPage);
    }

    /**
     * 构造方法
     * 
     * @param pageNum   第几页
     * @param pageSize  每页显示记录数
     */
    public PageHandleDefault(Integer pageNum, Integer pageSize) {
        super(pageNum, pageSize);
    }

    /**
     * 构造方法
     * 
     * @param pageNum       第几页
     * @param pageSize      每页显示记录数
     * @param orderByColumn 查询数据的排序字段
     */
    public PageHandleDefault(Integer pageNum, Integer pageSize, String orderByColumn) {
        super(pageNum, pageSize, orderByColumn);
    }

    /**
     * 构造方法
     * 
     * @param list  数据
     */
    public PageHandleDefault(List<T> list) {
        super(list);
    }

    /**
     * 构造方法
     * 
     * @param list          数据
     * @param orderByColumn 查询数据的排序字段
     * @param isPage        数据是否分页查询
     */
    public PageHandleDefault(List<T> list, String orderByColumn) {
        super(list, orderByColumn);
    }

    /**
     * 修改分页参数(默认获取下一页数据,如果当前页为最后一页则将当前页设为-1)
     * 
     * @param list
     */
    @Override
    public void init(List<T> list) {
        // 如果是分页对象就初始化分页数据
        if (getIsPage()) {
            Page<?> page = (Page<?>)list;
            if (StringUtil.isBlankObject(getPageNum())) {
                setPageNum(page.getPageNum() != PageHandleUtil.PAGE_NUM_ALL ? page.getPageNum()
                    : PageHandleUtil.PAGE_NUM_DEFAULT);
            }
            if (StringUtil.isBlankObject(getPageSize())) {
                setPageSize(page.getPageSize() != PageHandleUtil.PAGE_SIZE_ALL ? page.getPageSize()
                    : PageHandleUtil.PAGE_SIZE_DEFAULT);
            }
            setPageTotal(page.getPages());
            if (StringUtil.isBlankObject(getRunNum())) {
                setRunNum(getPageTotal());
            }
            return;
        }

        // 设置不分页
        if (StringUtil.isBlankObject(getPageNum())) {
            setPageNum(PageHandleUtil.PAGE_NUM_ALL);
        }
        if (StringUtil.isBlankObject(getPageSize())) {
            setPageSize(PageHandleUtil.PAGE_SIZE_ALL);
        }
        if (StringUtil.isBlankObject(getRunNum())) {
            setRunNum(1);
        }
    }

    /**
     * 修改分页参数(默认获取下一页数据,如果当前页为最后一页则将当前页设为-1)
     * 
     * @param list
     */
    @Override
    public void update(List<T> list) {
        // 获取当前页数
        Integer pageNum = getPageNum();
        // 当前页是否为最后一页
        if (pageNum.intValue() >= getPageTotal()) {
            // 将当前页设为最后一页
            setPageNum(-1);
            return;
        }

        // 将当前页设为下一页
        setPageNum(getPageNum() + 1);
    }

}